Repository navigation
chore(deps): update dependency can1357/oh-my-pi to v18.16.0 - #162
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
18.15.0→18.16.0Release Notes
can1357/oh-my-pi
v18.16.0Compare Source
@oh-my-pi/pi-agent-core
Changed
createFileOps,computeFileLists,formatFileOperations,upsertFileOperations,isUrlSchemePathandFileOperationsin@oh-my-pi/pi-agent-core/compaction; they now re-export@oh-my-pi/snapcompact, which callers should import directlyFixed
estimateTokensexport), count text in o200k_base instead of guessing 4 bytes per token, which undercounted what those providers bill by 11–48% on code-heavy sessions and let compaction fire late after a switch to them (#17607 by @will-bogusz)Removed
PI_TOKENIZER_ACCURATE: every model is now counted with a native tokenizer (#17607 by @will-bogusz)@oh-my-pi/pi-ai
Added
/login mistralsigns in through the browser like the Mistral Vibe CLI and stores the minted API key, whose usage counts against the plan's Vibe Code quota instead of pay-as-you-go API credits;MISTRAL_API_KEYstill works (#13875 by @Gauthier-Huguenin, continued in #17672 by @abilliontokens)dropsForeignReasoningPayload(turn, model), which tells whethertransformMessagescertainly strips a turn's thinking signatures and redacted thinking on the way tomodel, and, for Factory Droid's Gemini wire,isFactoryDroidGeminiWire(model)andkeepsFactoryGeminiReasoning(turn)(#17607 by @will-bogusz)Changed
formatErroron the embeddings, images, rerank, speech, transcriptions, video, pi-native and SystemOne server modules (now aliases ofcodedErrorResponse/noStoreErrorResponseinauth-gateway/http) andasStrictinproviders/aws-sigv4(nowasStrictBytesfrom@oh-my-pi/pi-utils)Fixed
@oh-my-pi/pi-catalog
Added
/login mistralnow offers the Mistral Vibe browser sign-in besideMISTRAL_API_KEY(#13875 by @Gauthier-Huguenin, continued in #17672 by @abilliontokens)revisionAtLeasttocompat/revisionand exportedwithOpenAICompatibleDiscoveryTimeoutfromdiscovery/openai-compatibleChanged
Fixed
cl100ktokenizer, so their context estimates count in cl100k_base rather than the o200k_base default for models without one (#17607 by @will-bogusz)@oh-my-pi/pi-coding-agent
Added
retainandlearncan now store a memory withscope: "global"so every project recalls it. It is opt-in through the newhindsight.globalScopesetting (off by default) and needsglobalorper-project-taggedscoping (#17706 by @alphastorm, from #15030 by @kithawk).btw.inject(off by default;/settings→ Interaction → "/btw Steering Inject"): when you ask/btwfor a steering prompt, it drafts one in an<inject>block shown behind a pink rail, andAlt+I(app.btw.inject) sends it to the main session (as a steer while the agent runs, else as a new turn) from the inline answer or the BTW history sheet, once per answer from the current run. Once sent, the block turns green with➤on each line and "Injected into main session" below it; if the main session drops or refuses the send, the block turns back to pending and the same key retries (#17618 by @apullin)OTEL_EXPORTER_OTLP_METRICS_ENDPOINT), composer predictions export content-freeomp.composer.prediction.*metrics by serving model: requests by outcome (offered, skipped, stale, cancelled, timeout, error) with their duration, predictions shown (counted on the first frame that paints them), shown predictions by whether they were accepted with Tab or Right, and the time from first display to acceptance (#17739 by @wolfiesch)Minimized: git 120.4KB → 3.2KB) (#16586 by @will-bogusz)attempts(JSawait handle.attempts(), Pythonhandle.attempts): each fallback candidate tried, in order, with the model, the reasoning effort sent, its outcome, and the error when it failed (#17782 by @xiangnan0811)composer.predictionAlternatives(off by default;/settings→ Interaction → "Prediction Alternatives", listed while Composer Predictions is on): the same single prediction request returns up to four different next messages, most likely first. Type a few letters to get ghost text for the first one that matches; after inserting one, press Tab again to pick another from a list. Prediction metrics carry how many alternatives were offered (omp.composer.prediction.choices), and an accepted prediction now resolves when it retires, with the rank of the alternative inserted last (omp.composer.prediction.rank) (#17796 by @wolfiesch)/reviewand/annotate code-reviewwork from a folder of checkouts:/review owner/repo#123reviews a GitHub PR from anywhere;/review ./repo [#​123 | !7] [focus]reviews in that checkout (#Na GitHub PR,!Na GitLab MR); and outside any repository, the local and open-PR menu choices ask which child repository to useChanged
/resumeandomp --resumeopen at once on your titled sessions (read from~/.omp/agent/history.db), then fill in prompts, status, and untitled sessions when the full scan finishes; the first scan saves older sessions' titles too, so later opens list them right awaysymbolPreset: ascii, status glyphs are three columns wide ([+],[-],[#],[ ]) and status spinners animate as[|] [/] [-] [\](#17732 by @JustasMasiulis)Fixed
browser.close({ all: true })from a subagent no longer closes its parent's tabs; it releases only the calling agent's tabs. Tabs now belong to the agent that opened them rather than its conversation id, so after/new,/resume, fork, or branch they are still frozen, idle-closed, released by close-all, and closed when the session ends instead of leaking (#15975, #16133 by @harshaygadekar)lsp requestnow sendspayload: "null"as JSON null instead of substituting auto-built document params (#17715)../con an empty conversation reports that there is nothing to resume (#17828).pr://<n>,issue://<n>, and repo-lessgithubtool calls in a checkout whoseupstreamremote is not the fork parent oforiginnow resolve toorigininstead of the upstream project;gh repo set-defaultstill winsomp -ptext mode now prints each automatic retry with its error (for example "Couldn't reach api.anthropic.com … check your network") instead of showing onlyWorking...while a turn retries (#17529 by @Mannan-Goyal)omp --exportand/exportno longer fail withError: Out of memoryon large sessions with subagent transcripts, and use far less memory: the HTML is now streamed to disk instead of built as one string (#17741)security_scanwithasync.enabledon (the default) now waits for its backgroundsecurity-reviewerworkers and publishes their findings, instead of endingpartialwith 0 findings and "The scan session ended without publishing a canonical result" (#17788)tab.waitForSelector,tab.evaluateandtab.gotono longer fail after 20 s when the page or server takes longer; like on a launched Chrome they now run to the call's own timeout, up to omp's 60 s protocol timeout, and a command Chrome never answers names itself and its tab (#17778 by @will-bogusz)tab.click(selector, { button, count })andframe.clickignoring their options and left-clicking once, so a right-click meant to open a context menu clicked the element instead; cmux tabs refuse buttons and counts they cannot press (#17767 by @will-bogusz)fillin Chrome no longer sometimes puts the new text in front of a Slate editor's old text when the machine is busy, and refuses a rich-text editor whose focus moves to a wrapper or the page instead of reporting success (#17742 by @will-bogusz)Target closedwhen Chrome detached omp from the tab; it now says Chrome detached omp and whether the tab was reattached, as a call in the page itself does (#17768 by @will-bogusz)persist: truein your Chrome through the relay now stay open when the session ends (anomp -prun exits, a subagent finishes), so a page left for you is still there; other tabs omp opened still close, and an explicit close racing session cleanup still closes its page (#17751 by @will-bogusz)xd://device mounts when woken after omp restarts, so they no longer lose their earlier Claude thinking (#17746 by @will-bogusz)%pipin Python eval leaving the installer process behind in Linux containers and chroots without a usable/proc(#16552 by @will-bogusz)readpages of files with very long lines ending after a few KB: a line cut totools.outputMaxColumnsnow counts the width shown, not its full length, against the page size, so paging no longer stops before such a line or refuses to step past it. When the first cut line is larger than a:rawread returns, the cut notice names that byte cap, and a multi-range read that the page size stops partway through a range says where to continue (#16595 by @will-bogusz)writeaccepting the output of areadwhose long lines were cut totools.outputMaxColumnsand overwriting the file with the cut lines; it now refuses it as an incomplete read, as it does for other truncated reads (#16595 by @will-bogusz)models.ymlacceptstokenizer: cl100kon a custom model or override (#17607 by @will-bogusz)~/.omp/agent/agent.dbgetting corrupted (wiping stored logins) on Linux when grep,read, the bash tool, extensions or eval read it while omp has it open;writeandttsnow refuse to overwrite a database omp holds open (#15586)@oh-my-pi/pi-natives
Added
macOSFrontApp(), which reads the app macOS has in front and can put it back in front for a while (keepInFront) without stopping for the user's typing (#16284 by @will-bogusz)Fixed
parseKey/matchesKeynow recognize the parameterlessCSI P/CSI Q/CSI S(andCSI 1 <letter>) forms that kitty-protocol terminals such as Ghostty send for unmodified F1/F2/F4, and modified F2–F9 no longer match other keys (e.g. Ctrl+PageDown as Ctrl+F8) (#17812).installSqliteLockShim()(Linux), which moves Bun's SQLite record locks onto open-file-description locks that no other close of the file releases, andheldFileKind(path), which reports a file this process holds open and locked. Both are also on@oh-my-pi/pi-natives/sqlite-locks, which loads the addon on first call (#15586)@oh-my-pi/snapcompact
Added
archiveIncludesThinking(), whether a compaction may replay reasoning from its summary's legend or its archive's text, andviewSummary(), which keeps a summary the template did not write in its own words, followed by the template's guide to the view's text (#17745 by @will-bogusz)Fixed
viewWithoutFramesandviewWithoutThinkingkeeping an archive's reasoning for a reader without it when the summary (say, one an extension wrote) declares no¶think:scope, and replacing such a summary with the template's (#17745 by @will-bogusz)@oh-my-pi/omp-stats
Fixed
@oh-my-pi/pi-tui
Breaking Changes
buildExecutionFramesets its loader into the newbottomBorderitself, so callers no longer add it as a row and must dispose it;buildStatusFooterno longer takesstatusorexitCode, andexecutionStatusLabelreturns a settled run'sexit N/cancelledmarker for that border (#17732 by @JustasMasiulis)SessionSelectorOptions.loadAllSessionsandSessionPickerHost.loadAllSessionsresolve to aSessionListing, andallSessionstakes one, so the all-projects scope can show preliminary rows before its complete listingEditor.predictionis replaced byEditor.predictions, which returns every prediction for the next prompt, most likely first, andEditor.onPredictionAcceptedreceives the inserted prediction's index in that list (#17796 by @wolfiesch)Added
SessionSelectorOptions.completeSessions(andSessionPickerOptions.completeSessions) replaces the picker's preliminary rows with the complete listing once it settles, keeping the query, the selected session, and deletes/renames made meanwhile/btwanswers can show a steering prompt as a block behind a pink rail (a toned card in Tern) thatAlt+I(app.btw.inject, remappable) sends to the main session; once sent it turns green with➤on each line, without moving (#17618 by @apullin)singleLineandfiniteWidthtoutilsfor row-confined text and cell widthsLoader.inlineText()returns the current spinner frame and message as one styled line, andDynamicBorder.setLabel()sets a label (or a function re-read every render) into the rule (#17732 by @JustasMasiulis)Changed
[+], error[-], aborted[#]and pending[ ](alongside[~]running,[!]warning and[i]info), and status spinners animate as[|] [/] [-] [\](#17732 by @JustasMasiulis)status.done,theme.status.doneor thedonevalue ofToolUIStatus; they remain as aliases ofstatus.success/success(an explicitsymbols.overrides["status.done"]still applies totheme.status.done) (#17732 by @JustasMasiulis)✔, ASCII[+]). Task rows, verdicts and headers, background-job, launch and supervised-process rows, Eval cells, Vibe, Wait and process job rows, Yield and the generic tool card showed a separate•done dot, and a finished Read showed●(ASCII[x]). Live Task agent rows show the pending or running glyph, and a Task whose merge failed shows the warning glyph (#17732 by @JustasMasiulis)preview/streaminglabel in the card's bottom border instead of on a row below the content;streamingends once the content has fully arrived (#17732 by @JustasMasiulis)!shell and$Python runs show their spinner, and thenexit Norcancelled, in the frame's bottom border instead of on rows of their own; the spinner is the status spinner tool headers use (#17732 by @JustasMasiulis)Fixed
requestresponse, that contains the error glyph (✘, ASCII[-]) is shown as a response instead of as diagnostics reading "No issues" with the rest of its lines dropped (#17732 by @JustasMasiulis)Editor.onPredictionAcceptedandEditor.onPredictionShownreport when Tab or Right inserts the rest of the composer prediction and when a frame paints it (at least one cell in the terminal, or the ghost on a native editor node) (#17739 by @wolfiesch)OutputMeta.minimized(bash minimizer filter, raw and minimized byte counts, raw-output artifact), shown as aMinimizedfact on bash result cards (#16586 by @will-bogusz)isColumnTruncationNoticeandhasColumnTruncationClausetotools/output-meta, matching the[Some lines truncated to …]clause thatformatOutputNoticeemits alone or inside a longer notice, andLimitsMeta.columnTruncated.rawByteCap, which makes that notice name the byte cap a:rawread of the first cut line stops at (#16595 by @will-bogusz)Editor.predictions, the ghost text follows the first one the draft is a prefix of; a typed draft that equals a shorter one keeps the ghost of a longer one. Once the buffer equals one of them with no ghost (always right after Tab, Right, or the list inserts one), a dim⇥ N morehint appears; press Tab to list them all, then Enter, Tab or Right to swap the whole line (never submitting) or Esc to keep it (#17796 by @wolfiesch)Component.nativeTrailers(), which lets a transcript block add native blocks of its own directly after it. Trailing blocks stay visible while the block is collapsed.@oh-my-pi/pi-utils
Added
isPidAlive(signal-0 liveness probe) andasStrictBytes(aUint8Arraynarrowed to its ownArrayBufferfor WebCrypto)ensureSqliteLockShim(), whichopenSqliteDatabase/openSqliteDatabaseSynccall before opening a store, so on Linux the process's SQLite locks are open-file-description locks that other closes of the file cannot release (#15586)assertNotHeldOpen(path)(@oh-my-pi/pi-utils/held-file), which throwsEBUSYfor a SQLite database or-shmthis process holds open (#15586)Changed
acpruntime validators (zNewSessionResponse,zSessionNotification, …) now report each failing field's path and reason inerror.issuesinstead of a singleInvalid <label>;ValidationErrorissue paths are typedPropertyKey[](#17699)@oh-my-pi/pi-wire
Added
packEnvelope,unpackEnvelopeandrewriteEnvelopePeerWhat's Changed
New Contributors
Full Changelog: can1357/oh-my-pi@v18.15.0...v18.16.0
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.